<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of RepoAuditCargosImpl
 *
 * @author EADeveloper
 */
class RepoDeudoresImpl extends ReportDoc {

    function __construct() {
        $this->fields = array(array("label" => "CODIGO", "name" => "ID", "type" => ReportDoc::$TIPO_LETRA, "width" => 13),
          array("label" => "NOMBRE", "name" => "NAME", "type" => ReportDoc::$TIPO_LETRA, "width" => 40),
          array("label" => "TIPO", "name" => "tipo", "type" => ReportDoc::$TIPO_LETRA, "width" => 20),
          array("label" => "DEUDA", "name" => "deuda", "type" => ReportDoc::$TIPO_LETRA, "width" => 13),
          array("label" => "FACTURA", "name" => "factura", "type" => ReportDoc::$TIPO_LETRA, "width" => 13),
          array("label" => "ENERO", "name" => "enero", "type" => ReportDoc::$TIPO_LETRA, "width" => 13),
          array("label" => "FEBRERO", "name" => "febrero", "type" => ReportDoc::$TIPO_LETRA, "width" => 13),
          array("label" => "MARZO", "name" => "marzo", "type" => ReportDoc::$TIPO_LETRA, "width" => 13),
          array("label" => "ABRIL", "name" => "abril", "type" => ReportDoc::$TIPO_LETRA, "width" => 13),
          array("label" => "MAYO", "name" => "mayo", "type" => ReportDoc::$TIPO_LETRA, "width" => 13),
          array("label" => "JUNIO", "name" => "junio", "type" => ReportDoc::$TIPO_LETRA, "width" => 13),
          array("label" => "JULIO", "name" => "julio", "type" => ReportDoc::$TIPO_LETRA, "width" => 13),
          array("label" => "AGOSTO", "name" => "agosto", "type" => ReportDoc::$TIPO_LETRA, "width" => 15),
          array("label" => "SEPTIEMBRE", "name" => "septiembre", "type" => ReportDoc::$TIPO_LETRA, "width" => 15),
          array("label" => "OCTUBRE", "name" => "octubre", "type" => ReportDoc::$TIPO_LETRA, "width" => 15),
          array("label" => "NOVIEMBRE", "name" => "noviembre", "type" => ReportDoc::$TIPO_LETRA, "width" => 15),
          array("label" => "DICIEMBRE", "name" => "diciembre", "type" => ReportDoc::$TIPO_LETRA, "width" => 15)); 
        
        $this->callbackSql = "cbSqlRepDeudores"; //funcion que genera sql
        $this->callbackRow = "cbRowDeudores"; //funcion para cada fila generada

        $this->paramPage = "reportes/rpt_deudores_param.php";
        $this->resultPage = "reportes/rpt_deudores_resultado.php";
        $this->rootPath = MODULES . DS;
        $this->key = "deudores";
        $this->label = "Estado General de Deudores";
        $this->tipoEjecucion = "D";
        $this->orientacion = "P";
    }

    /**
     * Obtiene la deuda para un determinado mes
     * @param type $mes
     * @param type $id
     * @param type $tipo
     * @return type 
     */
    function getSaldoMes($mes, $id, $tipo) {
        $sql = "select SUM(VALOR) deuda,CODIGO,TIPO,MONTH(FECHA) 
                    from cllg_academico_cobros 
                WHERE MONTH(FECHA)=$mes AND TIPO='$tipo' and FK_ESTUDIANTE=$id AND ESTADO='INGRESADO'
               GROUP BY CODIGO,TIPO,MONTH(FECHA); ";
        $r = $this->db->queryToArray($sql);

        if (count($r)) {
            $r = $r[0];
            return $r["deuda"];
        }
        return 0.00;
    }

    /**
     * Modifica filas de deudores
     */
    public function cbRowDeudores() {
        $rs = array();
        $meses = ModReports::$meses;
        foreach ($this->lastResult as $r) {
            foreach ($meses as $k => $m) {
                $r[$k] = $this->getSaldoMes($k + 1, $r["ID"], $r["tipo"], $this->db);
            }
            $rs[] = $r;
        }
        $this->lastResult = $rs;
    }

    /**
     * Devuelve todos los deudores y sus deudas en los respectivos meses
     */
    public function cbSqlRepDeudores() {
        $tipo = getParam("tipoconsulta");
        $lsStud = "select ID, CONCAT(FIRST_NAME,' ',LAST_NAME) AS NAME,'ESTUDIANTE' as tipo FROM cllg_student ";
        $lsBene = " select ID, RAZON_SOCIAL  as NAME,'BENEFACTOR' as tipo FROM cllg_benefactor";

        $sqlPersonas = isEmpty($tipo) || $tipo == 'ALL' ? "$lsStud UNION $lsStud" :
                ( $tipo == 'ESTUDIANTE' ? $lsStud : $lsBene );

        $totalRows = $this->db->queryToarray("select count(*) as total from ($sqlPersonas) b");
        $this->totalPages = $totalRows[0]["total"] / $this->pageLimit;

        $sqlPersonas = $this->pagerMode ? " $sqlPersonas  " : $sqlPersonas;
        $sql = "select a.ID,a.NAME,a.tipo,
                       b.deuda,c.factura,
                        (SELECT if(isnull(SALDO),0.00,SALDO) FROM saldos_cuentas WHERE saldos_cuentas.TIPO=a.TIPO 
                            and saldos_cuentas.MES=1 and saldos_cuentas.FK_ESTUDIANTE = a.ID  ) enero,
                        (SELECT if(isnull(SALDO),0.00,SALDO) FROM saldos_cuentas WHERE saldos_cuentas.TIPO=a.TIPO 
                            and saldos_cuentas.MES=2 and saldos_cuentas.FK_ESTUDIANTE = a.ID  ) febrero,
                        (SELECT if(isnull(SALDO),0.00,SALDO) FROM saldos_cuentas WHERE saldos_cuentas.TIPO=a.TIPO 
                            and saldos_cuentas.MES=3 and saldos_cuentas.FK_ESTUDIANTE = a.ID  ) marzo,
                        (SELECT if(isnull(SALDO),0.00,SALDO) FROM saldos_cuentas WHERE saldos_cuentas.TIPO=a.TIPO 
                            and saldos_cuentas.MES=4 and saldos_cuentas.FK_ESTUDIANTE = a.ID  ) abril,
                        (SELECT if(isnull(SALDO),0.00,SALDO) FROM saldos_cuentas WHERE saldos_cuentas.TIPO=a.TIPO 
                            and saldos_cuentas.MES=5 and saldos_cuentas.FK_ESTUDIANTE = a.ID  ) mayo,
                        (SELECT if(isnull(SALDO),0.00,SALDO) FROM saldos_cuentas WHERE saldos_cuentas.TIPO=a.TIPO 
                            and saldos_cuentas.MES=6 and saldos_cuentas.FK_ESTUDIANTE = a.ID  ) junio,
                        (SELECT if(isnull(SALDO),0.00,SALDO) FROM saldos_cuentas WHERE saldos_cuentas.TIPO=a.TIPO 
                            and saldos_cuentas.MES=7 and saldos_cuentas.FK_ESTUDIANTE = a.ID  ) julio,        
                        (SELECT if(isnull(SALDO),0.00,SALDO) FROM saldos_cuentas WHERE saldos_cuentas.TIPO=a.TIPO 
                            and saldos_cuentas.MES=8 and saldos_cuentas.FK_ESTUDIANTE = a.ID  ) agosto,
                        (SELECT if(isnull(SALDO),0.00,SALDO) FROM saldos_cuentas WHERE saldos_cuentas.TIPO=a.TIPO 
                            and saldos_cuentas.MES=9 and saldos_cuentas.FK_ESTUDIANTE = a.ID  ) septiembre,
                        (SELECT if(isnull(SALDO),0.00,SALDO) FROM saldos_cuentas WHERE saldos_cuentas.TIPO=a.TIPO 
                            and saldos_cuentas.MES=10 and saldos_cuentas.FK_ESTUDIANTE = a.ID  ) octubre,
                        (SELECT if(isnull(SALDO),0.00,SALDO) FROM saldos_cuentas WHERE saldos_cuentas.TIPO=a.TIPO 
                            and saldos_cuentas.MES=11 and saldos_cuentas.FK_ESTUDIANTE = a.ID  ) noviembre,
                        (SELECT if(isnull(SALDO),0.00,SALDO) FROM saldos_cuentas WHERE saldos_cuentas.TIPO=a.TIPO 
                            and saldos_cuentas.MES=12 and saldos_cuentas.FK_ESTUDIANTE = a.ID  ) diciembre       
                from ( $sqlPersonas ) a,
               ( select SUM(SALDO_ACT) deuda,FK_ESTUDIANTE,TIPO from cllg_academico_cobros WHERE 
                    ESTADO IN ('INGRESADO','PAGADOPARCIAL') 
                    GROUP BY FK_ESTUDIANTE,TIPO ) b,
               ( select SUM(SALDO_ACT) factura,FK_ESTUDIANTE,TIPO from cllg_academico_cobros  
                    GROUP BY FK_ESTUDIANTE,TIPO ) c
               WHERE  a.ID=b.FK_ESTUDIANTE and a.tipo=b.TIPO and b.deuda>0 and
                      a.ID=c.FK_ESTUDIANTE and a.tipo=c.TIPO";

        $this->lastQuery = $sql;
    }

}

?>
